import axios from 'axios'
const isProd = (process.env.NODE_ENV) === 'development';
// 创建 axios 实例
const service = axios.create({
    // axios中请求配置有baseURL选项，表示请求URL公共部分
    baseURL:'/clinic/',
    // 超时
    timeout: 120000,
    headers: {
        clientid:'e5cd7e4891bf95d1d19206ce24a7b32e'
    },

});

// 请求拦截器
service.interceptors.request.use(
    (config) => {
        // 只有开发环境才会执行
        setProdParams(config);
        const isToken = (config.headers || {}).isToken === false;

        const AdminToken = localStorage.getItem('Admin-Token');
        if (AdminToken && !isToken) {
            config.headers['Authorization'] = 'Bearer ' + AdminToken; // 让每个请求携带自定义token 请根据实际情况自行修改
        }
        // get请求映射params参数
        if (config.method === 'get' && config.params) {
            let url = config.url + '?' + tansParams(config.params);
            url = url.slice(0, -1);
            config.params = {};
            config.url = url;
        }

        if ((config.method === 'post' || config.method === 'put')) {
        }
        // FormData数据去请求头Content-Type
        if (config.data instanceof FormData) {
            delete config.headers['Content-Type'];
        }
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    (res) => {
        // 未设置状态码则默认成功状态
        const code = res.data.code;
        // 获取错误信息
        const message = res.data.msg;
        return res.data;
    },
    (error) => {
        // 打印接口日志，方便排查问题，不能去掉
        let { message } = error;
        if (message.includes('Request failed with status code')) {
            message = '【' + message.substr(message.length - 3) + '】服务断开连接';
        } else {
            message = '服务断开连接';
        }
        return Promise.reject(error);
    }
);
/**
 * 设置开发环境参数
 * @param config
 */
const setProdParams =(config)=>{
    if(isProd){
        if (config.data && typeof config.data === "object") {
            if (config.data.baseURL && config.data.baseURL !=''){
                config.baseURL = config.data.baseURL;
            }
        }
    }
}
/**
 * 参数处理
 * @param {*} params  参数
 */
const tansParams = (params) => {
    let result = '';
    for (const propName of Object.keys(params)) {
        const value = params[propName];
        const part = encodeURIComponent(propName) + '=';
        if (value !== null && value !== '' && typeof value !== 'undefined') {
            if (typeof value === 'object') {
                for (const key of Object.keys(value)) {
                    if (value[key] !== null && value[key] !== '' && typeof value[key] !== 'undefined') {
                        const params = propName + '[' + key + ']';
                        const subPart = encodeURIComponent(params) + '=';
                        result += subPart + encodeURIComponent(value[key]) + '&';
                    }
                }
            } else {
                result += part + encodeURIComponent(value) + '&';
            }
        }
    }
    return result;
};
export default service
